package com.kayak.kboot.web.sys;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.kayak.kkutils.CalendarUtil;
import com.kayak.kkutils.Tools;


public class SysUtil {
//	/**
//	 * 数组参数值组成字符串的分隔符
//	 */
//	public static final String PARAVALUE_ARRAY_SEPARATOR = "|,|";
//	/**
//	 * 设置用户菜单权限
//	 */
//	public static final String SYS_USER_MENU_SESSION_KEY = "kkweb.session.sys.user.menulist";
//
//	/**
//	 * 系统参数变量名前缀
//	 */
//	public static final String SYS_PARAM_PREFIX = "sys_param_";
//	/**
//	 * 用户信息变量名前缀
//	 */
//	public static final String SYS_USER_PREFIX = "sys_user_";
//
//	/**
//	 * 把当前用户登录信息参数集保存在SESSION中的key
//	 */
//	public static final String SYS_USER_PARAMS_SESSION_KEY = "kkweb.session.sys.user.params";
//
//	/**
//	 * 数组参数值组成字符串的分隔符应用到java.lang.String.split方法的正则串
//	 */
//	public static final String PARAVALUE_ARRAY_SPLIT_SEPARATOR = PARAVALUE_ARRAY_SEPARATOR
//			.replaceAll("\\|", "\\\\\\|");
//
//	/**
//	 * 返回date的时间是否在timeRange指定的时间范围内
//	 *
//	 * @param date
//	 *            Date
//	 * @param timeRange
//	 *            String 格式：hhmm-hhmm
//	 */
//	public static boolean isInTimeRange(Date date, String timeRange) {
//		if (date == null || timeRange == null)
//			return false;
//
//		String timeStr = Tools.dt2Time1(date);
//		int time = Tools.str2Int(timeStr.substring(0, 4));
//
//		String[] range = timeRange.split("[-]");
//		if (range.length != 2)
//			return false;
//
//		int startTime = Tools.str2Int(range[0].trim());
//		int endTime = Tools.str2Int(range[1].trim());
//
//		return time >= startTime && time <= endTime;
//	}
//
//	/**
//	 * 取得当前请求登录的客户端IP和计算机名
//	 *
//	 * @return
//	 */
//	public static Set<String> getClientStation() {
//		HttpServletRequest request = RequestSupport.getLocalRequest();
//		Set<String> set = new HashSet<String>();
//		set.add(request.getRemoteAddr());
//		set.add(request.getRemoteHost());
//		return set;
//	}
//
//	/**
//	 * 获取当前WEB应用上下文对象(SPRING)
//	 */
//	public static ServletContext getServletContext() {
//		return ContextLoader.getCurrentWebApplicationContext()
//				.getServletContext();
//	}
//
//	/**
//	 * 取得当前用户登录信息参数集
//	 */
//	public static Map<String, Object> getSysUserParams() {
//		HttpServletRequest request = RequestSupport.getLocalRequest();
//		if (request == null)
//			return null;
//		// 用户登录信息参数，先尝试从SESSION中取得
//		@SuppressWarnings("unchecked")
//		Map<String, Object> userParams = (Map<String, Object>) request
//				.getSession().getAttribute(SYS_USER_PARAMS_SESSION_KEY);
//		return userParams;
//	}
//
//	/**
//	 * 取得当前用户登录信息参数值
//	 *
//	 * @throws ErrorException
//	 */
//	public static Object getSysUserParamValue(String pname)
//			throws ErrorException {
//		Map<String, Object> userParams = getSysUserParams();
//		if (userParams == null)
//			return null;
//
//		return userParams.get(pname);
//	}
//
//	/**
//	 * 取得系统参数值
//	 *
//	 * @param paraid
//	 *            系统参数ID
//	 * @throws ErrorException
//	 */
//	public static String getSysParamValueById(String paraid)
//			throws ErrorException {
//		Object obj = getSysParamValue(SYS_PARAM_PREFIX + paraid);
//		if (obj == null)
//			return "";
//		else
//			return obj.toString();
//	}
//
//	/**
//	 * 取得系统参数值
//	 *
//	 * @param pname
//	 *            系统参数名，必须是以sys_param_开头加paraid这样的值
//	 * @throws ErrorException
//	 */
//	public static Object getSysParamValue(String pname) throws ErrorException {
//		if (!pname.startsWith(SYS_PARAM_PREFIX))// 不是系统参数变量
//			return null;
//		Map<String, Object> params = CacheParam.getSysParams();
//		if (params == null)
//			return null;
//		return params.get(pname.substring(SYS_PARAM_PREFIX.length()));
//	}

	/**
	 * 取得系统动态参数值<br />
	 * 供bizr2.tld标签库使用的方法
	 *
	 * @param pname
	 * @return
	 */
	public static String getSysDyncParamValue(String pname) {
		Object obj = getSysDynamicParamValue(pname,
				new HashMap<String, Object>());
		if (obj == null)
			return "";
		return obj.toString();
	}

	/**
	 * 取得系统动态参数的实时值
	 *
	 * <pre>
	 * SYSDATE - String, 系统当前日期
	 * SYSTIME - String, 系统当前时间
	 * SYSDATETIME - String, 系统当前日期时间
	 * SYSYESTODAY - String，系统昨天的日期
	 * SYSYFIRSTDAY - String, 今年的第一天
	 * SYSMFIRSTDAY - String, 本月的第一天
	 * SYSMLASTDAY - String, 本月的最后一天
	 * SYSYEAR 获得当前年份
	 * SYSMONTH 获得当前月份  
	 * SYSDAYOFYEAR 获得今天在本年的第几天  
	 * SYSDAYOFYMONTH 获得今天在本月的第几天(获得当前日) 
	 * SYSDAYOFWEEK 获得今天在本周的第几天  
	 * </pre>
	 *
	 * @param pname
	 * @return
	 */
	public static Object getSysDynamicParamValue(String pname, final Map<String, Object> params) {
		if ("SYSDATE".equals(pname)) {
			return Tools.dt2Date1(new Date());
		} else if ("SYSTIME".equals(pname)) {
			return Tools.dt2Time1(new Date());
		} else if ("SYSDATETIME".equals(pname)) {
			return Tools.dt2Date(new Date());
		} else if ("SYSYFIRSTDAY".equals(pname)) {
			return Tools.dt2Date1(Tools.firstDayOfCurrYear());
		} else if ("SYSMFIRSTDAY".equals(pname)) {
			return Tools.dt2Date1(Tools.firstDayOfMonth(new Date()));
		} else if ("SYSMLASTDAY".equals(pname)) {
			return Tools.dt2Date1(Tools.lastDayOfMonth(new Date()));
		} else if ("SYSYESTODAY".equals(pname)) {
			return Tools.dt2Date1(Tools.yeatoday());
		} else if ("SYSYEAR".equals(pname)) {
			return CalendarUtil.getYear();
		} else if ("SYSMONTH".equals(pname)) {
			return CalendarUtil.getMonth();
		} else if ("SYSDAYOFYEAR".equals(pname)) {
			return CalendarUtil.getDayOfYear();
		} else if ("SYSDAYOFYMONTH".equals(pname)) {
			return CalendarUtil.getDayOfMonth();
		} else if ("SYSDAYOFWEEK".equals(pname)) {
			return CalendarUtil.getDayOfWeek();
		} else if ("SYSADMINS".equals(pname)) {// 系统管理员ID
			//return Global.ADMIN_LOGINAME().split("[,]");
		} else if ("SYSUUID".equals(pname)) {//
			return Tools.uuidLower();
		}
		// 尝试从系统参数配置中取得相关值
		//return SysParamDao.getSysParamValue(pname, params);
		return "";
	}

//	/**
//	 * 解释数据库中定义为char型，用于表示是/否的值，翻译成boolean对象返回
//	 */
//	public static boolean char2Boolean(String str) {
//		return "Y".equalsIgnoreCase(str);
//	}
//
//	/**
//	 * 将boolean值解释成数据库中定义为char型，用于表示是/否的值
//	 */
//	public static String boolean2Char(Boolean bool) {
//		return (bool != null && bool ? "Y" : "N");
//	}
//
//	/**
//	 * 取得系统单位名称
//	 *
//	 * @return
//	 * @throws ErrorException
//	 */
//	public static String getCompanyName() throws ErrorException {
//		return Tools.trimString(getSysParamValueById("10000"));
//	}
//
//	/**
//	 * 处理参数值，把null转换为指定字符串用以保存到数据库
//	 */
//	public static Object paraNull2Value(Object val) {
//		if (val == null) {
//			return Global.NULL_VALUE;
//		}
//		// 处理数组中的参数值
//		if (val.getClass().isArray()) {
//			Object[] objs = (Object[]) val;
//			for (int i = 0; i < objs.length; i++) {
//				objs[i] = paraNull2Value(objs[i]);
//			}
//		}
//		return val;
//	}
//
//	/**
//	 * 处理参数值，从数据库中读取参数值时，把表示null的字符串参数值转回null值
//	 */
//	public static Object paraValue2Null(Object val) {
//		if (Global.NULL_VALUE.equals(val)) {
//			return null;
//		}
//		// 处理数组中的参数值
//		if (val.getClass().isArray()) {
//			Object[] objs = (Object[]) val;
//			for (int i = 0; i < objs.length; i++) {
//				objs[i] = paraValue2Null(objs[i]);
//			}
//		}
//		return val;
//	}
//
//	/**
//	 * 判断参数值对象是否SysParamObject对象，如果是则抽取出SysParamObject对象中的value返回，
//	 * 否则直接返回paravalueobj
//	 */
//	public static Object paraValue(Object paravalueobj) {
//		if (paravalueobj == null)
//			return null;
//
//		if (paravalueobj instanceof SysParamObject) {
//			return ((SysParamObject) paravalueobj).getValue();
//		} else {
//			return paravalueobj;
//		}
//	}
//
//	/**
//	 * 将数组所有元素以PARAVALUE_ARRAY_SEPARATOR定义的分隔符串连起来组成一个字符串返回<br />
//	 * （数组中的元素将被直接转成字符串）
//	 *
//	 * @param objs
//	 * @return
//	 */
//	public static String paraArray2String(Object[] objs) {
//		return Tools.arrayJoin(objs, PARAVALUE_ARRAY_SEPARATOR);
//	}
//
//	public static String urlDecode(String url) {
//		try {
//			return new String(Tools.urlDecode(url).getBytes("ISO-8859-1"),
//					"utf-8");
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//			return "";
//		}
//
//	}
//
//	/**
//	 * 翻译字典
//	 *
//	 * @param dictName
//	 * @param value
//	 * @return
//	 */
//	public static String transferDict(String dictName, String value) {
//		try {
//			return CacheDict.getCacheDict(dictName).get(value);
//		} catch (ErrorException e) {
//			e.printStackTrace();
//		}
//		return value;
//	}
//
//	/**
//	 * 获取缓存中的字典<br>
//	 * 将查询到字典<code>Map<String, String></code>对象传输到前台处理
//	 *
//	 * @param dictName
//	 * @return Map<String, String>
//	 */
//	public static Map<String, String> getDicts(String dictName) {
//		Map<String, String> params = null;
//		try {
//			params = CacheDict.getCacheDict(dictName);
//		} catch (ErrorException e1) {
//			e1.printStackTrace();
//		}
//		if (params == null) {
//			return new HashMap<String, String>();
//		}
//		return params;
//	}
//
//	public static List getOptions(String exeid, String exeParamNames,
//			String exeParamValues) {
//		Map params = null;
//		try {
//			params = new HashMap();
//			params.put("exeid", exeid);
//			String names[] = exeParamNames.split("\\,");
//			String values[] = exeParamValues.split("\\,");
//			for (int i = 0; i < names.length; i++) {
//				if (StringUtils.isNotBlank(names[i])
//						&& StringUtils.isNotBlank(values[i])) {
//					params.put(names[i], values[i]);
//				}
//			}
//			return SysBeans.getComnDao().query(params).getRows();
//		} catch (ErrorException e1) {
//			e1.printStackTrace();
//			return null;
//		}
//	}
//
//	public static String getTreeNodes(String exeid, String exeParamNames,
//			String exeParamValues) {
//		Map params = null;
//		try {
//			params = new HashMap();
//			params.put("exeid", exeid);
//			String names[] = exeParamNames.split("\\,");
//			String values[] = exeParamValues.split("\\,");
//			for (int i = 0; i < names.length; i++) {
//				if (StringUtils.isNotBlank(names[i])
//						&& StringUtils.isNotBlank(values[i])) {
//					params.put(names[i], values[i]);
//				}
//			}
//			return JsonUtil.objectToJson(
//					SysBeans.getComnDao().query(params).getRows()).replace(
//					"pid", "pId");
//		} catch (ErrorException e1) {
//			e1.printStackTrace();
//			return null;
//		}
//	}
//
//	public static List getHomeData(String exeid, String organNo) {
//		List list = new ArrayList();
//		Map params = new HashMap();
//		params.put("exeid", exeid);
//		params.put("organno", organNo);
//		try {
//			list = SysBeans.getComnDao().query(params).getRows();
//		} catch (ErrorException e) {
//			e.printStackTrace();
//		}
//		return list;
//	}
//
//	/**
//	 * 获取系统参数
//	 *
//	 * @return getSingleObject
//	 */
//	public static Map<String, Object> getSysParams() {
//		Map<String, Object> params = new HashMap<String, Object>();
//		params.put("exeid", "ESYS_QUERY_PARAM");
//		return getSingleObject(params);
//	}
//
//	/**
//	 * 根据参数获取数据数组列表
//	 *
//	 * @param params
//	 *            查询参数
//	 * @return map
//	 */
//	@SuppressWarnings("unchecked")
//	public static Map<String, Object> getSingleObject(Map<String, Object> params) {
//		Map<String, Object> result = null;
//		try {
//			SqlResult rs = SysBeans.getComnDao().query(params);
//			result = (Map<String, Object>) JsonUtil.jsonToMap(RequestSupport
//					.result2JsonList(new KResult(rs)));
//		} catch (ErrorException e) {
//			e.printStackTrace();
//		}
//		return result;
//	}
//
//	public static String genIDBySeqTable(String sqName) {
//		Map params = new HashMap();
//		params.put("exeid", "EPAYPLOY003");
//		params.put("sqname", sqName);
//		String maxid = "";
//		try {
//			maxid = SysBeans.getComnDao().query(params).getRow(0)
//					.getString("maxid");
//			params.put("exeid", "EPAYPLOY004");
//			SysBeans.getComnDao().update(params);
//		} catch (SqlException e) {
//			e.printStackTrace();
//		} catch (ErrorException e) {
//			e.printStackTrace();
//		}
//		Date d = new Date();
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//		String dateNowStr = sdf.format(d);
//		return dateNowStr + maxid;
//	}
//
//	private static List list = new ArrayList();
//
//	public static void main(String[] args) throws Exception {
//
//		list.add(1);
//		list.add(2);
//		list.add(3);
//		list.add(4);
//		list.add(5);
//		System.out.println(list.size());
//		List list2 = new ArrayList();
//		list2.addAll(list);
//		list2.remove(2);
//		System.out.println(list.size());
//
//		System.out.println(list2.size());
//
//	}

}
